{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8aa08564",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch            : 1.10.1\n",
      "pytorch_lightning: 1.6.0.dev0\n",
      "torchmetrics     : 0.6.2\n",
      "matplotlib       : 3.3.4\n",
      "coral_pytorch    : 1.2.0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "%load_ext watermark\n",
    "%watermark -p torch,pytorch_lightning,torchmetrics,matplotlib,coral_pytorch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d8c56c2e",
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext pycodestyle_magic\n",
    "%flake8_on --ignore W291,W293,E703"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2ea3b1f",
   "metadata": {},
   "source": [
    "<a href=\"https://pytorch.org\"><img src=\"https://raw.githubusercontent.com/pytorch/pytorch/master/docs/source/_static/img/pytorch-logo-dark.svg\" width=\"90\"/></a> &nbsp; &nbsp;&nbsp;&nbsp;<a href=\"https://www.pytorchlightning.ai\"><img src=\"https://raw.githubusercontent.com/PyTorchLightning/pytorch-lightning/master/docs/source/_static/images/logo.svg\" width=\"150\"/></a>\n",
    "\n",
    "# Binary extension MLP for ordinal regression and deep learning -- cement strength dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b7fe9ae",
   "metadata": {},
   "source": [
    "This tutorial explains how to train a deep neural network (here: multilayer perceptron) with the binary extension method by Niu at al. 2016 for ordinal regression. \n",
    "\n",
    "**Paper reference:**\n",
    "\n",
    "- Niu, Zhenxing, Mo Zhou, Le Wang, Xinbo Gao, and Gang Hua. \"[Ordinal regression with multiple output cnn for age estimation](https://openaccess.thecvf.com/content_cvpr_2016/papers/Niu_Ordinal_Regression_With_CVPR_2016_paper.pdf).\" In Proceedings of the IEEE conference on computer vision and pattern recognition."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a91c5cb",
   "metadata": {},
   "source": [
    "**Note:**\n",
    "    \n",
    "To keep the notation lean and minimal, this notebook only contains \"Squared-error reformulation\"-specific comments. For more comments on the PyTorch Lightning use, please see the cross-entropy baseline notebook [baseline-light_cement.ipynb](./baseline-light_cement.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8f10f9e",
   "metadata": {},
   "source": [
    "## General settings and hyperparameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "558765e6",
   "metadata": {},
   "outputs": [],
   "source": [
    "BATCH_SIZE = 32\n",
    "NUM_EPOCHS = 200\n",
    "LEARNING_RATE = 0.01\n",
    "NUM_WORKERS = 0\n",
    "\n",
    "DATA_BASEPATH = \".\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "455a429b",
   "metadata": {},
   "source": [
    "## Converting a regular classifier into a Niu et al. ordinal regression model"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9607c53",
   "metadata": {},
   "source": [
    "Changing a classifier to a binary extension model (as proposed by Niu et al.) for ordinal regression is actually really simple and only requires a few changes:\n",
    "\n",
    "**1)**\n",
    "We replace the output layer  \n",
    "\n",
    "```python\n",
    "output_layer = torch.nn.Linear(hidden_units[-1], num_classes)\n",
    "```\n",
    "\n",
    "by a CORAL layer (available through `coral_pytorch`):\n",
    "\n",
    "```python\n",
    "output_layer = torch.nn.Linear(size_in=hidden_units[-1], num_classes=num_classes-1*2)`\n",
    "```\n",
    "\n",
    "**2)**\n",
    "\n",
    "Convert the integer class labels into the extended binary label format using the `levels_from_labelbatch` provided via `coral_pytorch`:\n",
    "\n",
    "```python\n",
    "levels = levels_from_labelbatch(class_labels, \n",
    "                                num_classes=num_classes)\n",
    "```\n",
    "\n",
    "**3)** \n",
    "\n",
    "Swap the cross entropy loss from PyTorch,\n",
    "\n",
    "```python\n",
    "torch.nn.functional.cross_entropy(logits, true_labels)\n",
    "```\n",
    "\n",
    "with a new loss function:\n",
    "\n",
    "```python\n",
    "def niu_et_al_loss(logits, levels):\n",
    "    val = (-torch.sum((F.log_softmax(logits, dim=2)[:, :, 1]*levels\n",
    "                      + F.log_softmax(logits, dim=2)[:, :, 0]*(1-levels)), dim=1))\n",
    "    return torch.mean(val)\n",
    "\n",
    "loss = niu_et_al_loss(logits, levels)\n",
    "```\n",
    "\n",
    "**4)**\n",
    "\n",
    "In a regular classifier, we usually obtain the predicted class labels as follows:\n",
    "\n",
    "```python\n",
    "predicted_labels = torch.argmax(logits, dim=1)\n",
    "```\n",
    "\n",
    "Replace this with the following code to convert the predicted probabilities into the predicted labels:\n",
    "\n",
    "```python\n",
    "\n",
    "def niu_logits_to_labels(logits):\n",
    "    probas = F.softmax(logits, dim=2)[:, :, 1]\n",
    "    predict_levels = probas > 0.5\n",
    "    predicted_labels = torch.sum(predict_levels, dim=1)\n",
    "    return predicted_labels\n",
    "\n",
    "\n",
    "predicted_labels = niu_logits_to_labels(logits)\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c569076",
   "metadata": {},
   "source": [
    "## Implementing a `MultiLayerPerceptron` using PyTorch Lightning's `LightningModule`"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a14c5681",
   "metadata": {},
   "source": [
    "\n",
    "- Given a multilayer perceptron classifier with cross entropy loss, it is very easy to change this classifier into a ordinal regression model using the extended binary method as explained in the previous section. In the code example below, we just change the output layer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7c907a9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "\n",
    "# Regular PyTorch Module\n",
    "class MultiLayerPerceptron(torch.nn.Module):\n",
    "    def __init__(self, input_size, hidden_units, num_classes):\n",
    "        super().__init__()\n",
    "\n",
    "        # num_classes is used by the CORAL loss function\n",
    "        self.num_classes = num_classes\n",
    "        \n",
    "        # Initialize MLP layers\n",
    "        all_layers = []\n",
    "        for hidden_unit in hidden_units:\n",
    "            layer = torch.nn.Linear(input_size, hidden_unit)\n",
    "            all_layers.append(layer)\n",
    "            all_layers.append(torch.nn.ReLU())\n",
    "            input_size = hidden_unit\n",
    "\n",
    "        # Modify output layer -------------------------------------------\n",
    "        # Regular classifier would use the following output layer:\n",
    "        # output_layer = torch.nn.Linear(hidden_units[-1], num_classes)\n",
    "        output_layer = torch.nn.Linear(hidden_units[-1], (num_classes-1)*2)\n",
    "        # ----------------------------------------------------------------\n",
    "        \n",
    "        all_layers.append(output_layer)\n",
    "        self.model = torch.nn.Sequential(*all_layers)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        x = self.model(x)\n",
    "        \n",
    "        # Reshape logits for Niu et al. loss\n",
    "        x = x.view(-1, (self.num_classes-1), 2)\n",
    "        # -------------------------------------------------------------------###        \n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a5247f4d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from coral_pytorch.dataset import levels_from_labelbatch\n",
    "\n",
    "import torch.nn.functional as F\n",
    "import pytorch_lightning as pl\n",
    "import torchmetrics\n",
    "\n",
    "\n",
    "def niu_et_al_loss(logits, levels):\n",
    "    val = -torch.sum(\n",
    "        (\n",
    "            F.log_softmax(logits, dim=2)[:, :, 1] * levels\n",
    "            + F.log_softmax(logits, dim=2)[:, :, 0] * (1 - levels)\n",
    "        ),\n",
    "        dim=1,\n",
    "    )\n",
    "    return torch.mean(val)\n",
    "\n",
    "\n",
    "def niu_logits_to_labels(logits):\n",
    "    probas = F.softmax(logits, dim=2)[:, :, 1]\n",
    "    predict_levels = probas > 0.5\n",
    "    predicted_labels = torch.sum(predict_levels, dim=1)\n",
    "    return predicted_labels\n",
    "\n",
    "\n",
    "class LightningMLP(pl.LightningModule):\n",
    "    def __init__(self, model, learning_rate):\n",
    "        super().__init__()\n",
    "\n",
    "        self.learning_rate = learning_rate\n",
    "        self.model = model\n",
    "\n",
    "        self.save_hyperparameters(ignore=['model'])\n",
    "\n",
    "        self.train_mae = torchmetrics.MeanAbsoluteError()\n",
    "        self.valid_mae = torchmetrics.MeanAbsoluteError()\n",
    "        self.test_mae = torchmetrics.MeanAbsoluteError()\n",
    "        \n",
    "    def forward(self, x):\n",
    "        return self.model(x)\n",
    "        \n",
    "    def _shared_step(self, batch):\n",
    "        features, true_labels = batch\n",
    "        \n",
    "        # Convert class labels to the extended binary labels  ---\n",
    "        levels = levels_from_labelbatch(\n",
    "            true_labels, num_classes=self.model.num_classes)\n",
    "        # -------------------------------------------------------\n",
    "\n",
    "        logits = self(features)\n",
    "\n",
    "        # Custom Loss --------------------------------------------\n",
    "        # A regular classifier uses:\n",
    "        # loss = torch.nn.functional.cross_entropy(logits, true_labels)\n",
    "        loss = niu_et_al_loss(logits, levels.type_as(logits))\n",
    "        # -------------------------------------------------------\n",
    "\n",
    "        # Prediction to label -----------------------------------\n",
    "        # A regular classifier uses:\n",
    "        # predicted_labels = torch.argmax(logits, dim=1)\n",
    "        predicted_labels = niu_logits_to_labels(logits)\n",
    "        # -------------------------------------------------------\n",
    "        return loss, true_labels, predicted_labels\n",
    "\n",
    "    def training_step(self, batch, batch_idx):\n",
    "        loss, true_labels, predicted_labels = self._shared_step(batch)\n",
    "        self.log(\"train_loss\", loss)\n",
    "        self.train_mae(predicted_labels, true_labels)\n",
    "        self.log(\"train_mae\", self.train_mae, on_epoch=True, on_step=False)\n",
    "        return loss\n",
    "\n",
    "    def validation_step(self, batch, batch_idx):\n",
    "        loss, true_labels, predicted_labels = self._shared_step(batch)\n",
    "        self.log(\"valid_loss\", loss)\n",
    "        self.valid_mae(predicted_labels, true_labels)\n",
    "        self.log(\"valid_mae\", self.valid_mae,\n",
    "                 on_epoch=True, on_step=False, prog_bar=True)\n",
    "\n",
    "    def test_step(self, batch, batch_idx):\n",
    "        _, true_labels, predicted_labels = self._shared_step(batch)\n",
    "        self.test_mae(predicted_labels, true_labels)\n",
    "        self.log(\"test_mae\", self.test_mae, on_epoch=True, on_step=False)\n",
    "\n",
    "    def configure_optimizers(self):\n",
    "        optimizer = torch.optim.Adam(self.parameters(), lr=self.learning_rate)\n",
    "        return optimizer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9083eeb8",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "# Note: There Are No Changes Compared To The Baseline Below\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7959fab",
   "metadata": {},
   "source": [
    "## Setting up the dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb6a5846",
   "metadata": {},
   "source": [
    "### Inspecting the dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a4056461",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>response</th>\n",
       "      <th>V1</th>\n",
       "      <th>V2</th>\n",
       "      <th>V3</th>\n",
       "      <th>V4</th>\n",
       "      <th>V5</th>\n",
       "      <th>V6</th>\n",
       "      <th>V7</th>\n",
       "      <th>V8</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4</td>\n",
       "      <td>540.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>1040.0</td>\n",
       "      <td>676.0</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>540.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>1055.0</td>\n",
       "      <td>676.0</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>332.5</td>\n",
       "      <td>142.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>228.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>932.0</td>\n",
       "      <td>594.0</td>\n",
       "      <td>270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>332.5</td>\n",
       "      <td>142.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>228.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>932.0</td>\n",
       "      <td>594.0</td>\n",
       "      <td>365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>198.6</td>\n",
       "      <td>132.4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>192.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>978.4</td>\n",
       "      <td>825.5</td>\n",
       "      <td>360</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   response     V1     V2   V3     V4   V5      V6     V7   V8\n",
       "0         4  540.0    0.0  0.0  162.0  2.5  1040.0  676.0   28\n",
       "1         4  540.0    0.0  0.0  162.0  2.5  1055.0  676.0   28\n",
       "2         2  332.5  142.5  0.0  228.0  0.0   932.0  594.0  270\n",
       "3         2  332.5  142.5  0.0  228.0  0.0   932.0  594.0  365\n",
       "4         2  198.6  132.4  0.0  192.0  0.0   978.4  825.5  360"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "data_df = pd.read_csv(\"https://raw.githubusercontent.com/gagolews/\"\n",
    "                      \"ordinal_regression_data/master/cement_strength.csv\")\n",
    "data_df[\"response\"] = data_df[\"response\"]-1  # labels should start at 0\n",
    "\n",
    "data_labels = data_df[\"response\"]\n",
    "data_features = data_df.loc[:, [\n",
    "    \"V1\", \"V2\", \"V3\", \"V4\", \"V5\", \"V6\", \"V7\", \"V8\"]]\n",
    "\n",
    "data_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5bd821b7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of features: 8\n",
      "Number of examples: 998\n",
      "Labels: [0 1 2 3 4]\n",
      "Label distribution: [196 310 244 152  96]\n"
     ]
    }
   ],
   "source": [
    "print('Number of features:', data_features.shape[1])\n",
    "print('Number of examples:', data_features.shape[0])\n",
    "print('Labels:', np.unique(data_labels.values))\n",
    "print('Label distribution:', np.bincount(data_labels))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acc95a6e",
   "metadata": {},
   "source": [
    "### Performance baseline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "13b69b54",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Baseline MAE: 1.03\n"
     ]
    }
   ],
   "source": [
    "avg_prediction = np.median(data_labels.values)  # median minimizes MAE\n",
    "baseline_mae = np.mean(np.abs(data_labels.values - avg_prediction))\n",
    "print(f'Baseline MAE: {baseline_mae:.2f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89e7ba49",
   "metadata": {},
   "source": [
    "### Creating a `Dataset` class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "98d88d3a",
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.utils.data import Dataset\n",
    "\n",
    "\n",
    "class MyDataset(Dataset):\n",
    "\n",
    "    def __init__(self, feature_array, label_array, dtype=np.float32):\n",
    "        self.features = feature_array.astype(dtype)\n",
    "        self.labels = label_array\n",
    "\n",
    "    def __getitem__(self, index):\n",
    "        inputs = self.features[index]\n",
    "        label = self.labels[index]\n",
    "        return inputs, label\n",
    "\n",
    "    def __len__(self):\n",
    "        return self.features.shape[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9da3ae6a",
   "metadata": {},
   "source": [
    "### Setting up a `DataModule`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e002d9fe",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "\n",
    "class DataModule(pl.LightningDataModule):\n",
    "    def __init__(self, data_path='./'):\n",
    "        super().__init__()\n",
    "        self.data_path = data_path\n",
    "        \n",
    "    def prepare_data(self):\n",
    "        data_df = pd.read_csv(\n",
    "            'https://raw.githubusercontent.com/gagolews/'\n",
    "            'ordinal_regression_data/master/cement_strength.csv')\n",
    "        data_df.to_csv(\n",
    "            os.path.join(self.data_path, 'cement_strength.csv'), index=None)\n",
    "        return\n",
    "\n",
    "    def setup(self, stage=None):\n",
    "        data_df = pd.read_csv(\n",
    "            os.path.join(self.data_path, 'cement_strength.csv'))\n",
    "        data_df[\"response\"] = data_df[\"response\"]-1  # labels should start at 0\n",
    "        self.data_labels = data_df[\"response\"]\n",
    "        self.data_features = data_df.loc[:, [\n",
    "            \"V1\", \"V2\", \"V3\", \"V4\", \"V5\", \"V6\", \"V7\", \"V8\"]]\n",
    "        \n",
    "        # Split into\n",
    "        # 70% train, 10% validation, 20% testing\n",
    "        \n",
    "        X_temp, X_test, y_temp, y_test = train_test_split(\n",
    "            self.data_features.values,\n",
    "            self.data_labels.values,\n",
    "            test_size=0.2,\n",
    "            random_state=1,\n",
    "            stratify=self.data_labels.values)\n",
    "\n",
    "        X_train, X_valid, y_train, y_valid = train_test_split(\n",
    "            X_temp,\n",
    "            y_temp,\n",
    "            test_size=0.1,\n",
    "            random_state=1,\n",
    "            stratify=y_temp)\n",
    "        \n",
    "        # Standardize features\n",
    "        sc = StandardScaler()\n",
    "        X_train_std = sc.fit_transform(X_train)\n",
    "        X_valid_std = sc.transform(X_valid)\n",
    "        X_test_std = sc.transform(X_test)\n",
    "\n",
    "        self.train = MyDataset(X_train_std, y_train)\n",
    "        self.valid = MyDataset(X_valid_std, y_valid)\n",
    "        self.test = MyDataset(X_test_std, y_test)\n",
    "\n",
    "    def train_dataloader(self):\n",
    "        return DataLoader(self.train, batch_size=BATCH_SIZE,\n",
    "                          num_workers=NUM_WORKERS,\n",
    "                          drop_last=True)\n",
    "\n",
    "    def val_dataloader(self):\n",
    "        return DataLoader(self.valid, batch_size=BATCH_SIZE,\n",
    "                          num_workers=NUM_WORKERS)\n",
    "\n",
    "    def test_dataloader(self):\n",
    "        return DataLoader(self.test, batch_size=BATCH_SIZE,\n",
    "                          num_workers=NUM_WORKERS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "e8530232",
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.manual_seed(1) \n",
    "data_module = DataModule(data_path=DATA_BASEPATH)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26a651dd",
   "metadata": {},
   "source": [
    "## Training the model using the PyTorch Lightning Trainer class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "9e743c6f",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pytorch_lightning.callbacks import ModelCheckpoint\n",
    "from pytorch_lightning.loggers import CSVLogger\n",
    "\n",
    "\n",
    "pytorch_model = MultiLayerPerceptron(\n",
    "    input_size=data_features.shape[1],\n",
    "    hidden_units=(24, 16),\n",
    "    num_classes=np.bincount(data_labels).shape[0])\n",
    "\n",
    "lightning_model = LightningMLP(\n",
    "    model=pytorch_model,\n",
    "    learning_rate=LEARNING_RATE)\n",
    "\n",
    "\n",
    "callbacks = [ModelCheckpoint(\n",
    "    save_top_k=1, mode=\"min\", monitor=\"valid_mae\")]  # save top 1 model \n",
    "logger = CSVLogger(save_dir=\"logs/\", name=\"mlp-niu-cement\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d87f7cad",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jovyan/conda/lib/python3.8/site-packages/pytorch_lightning/trainer/connectors/callback_connector.py:90: LightningDeprecationWarning: Setting `Trainer(progress_bar_refresh_rate=50)` is deprecated in v1.5 and will be removed in v1.7. Please pass `pytorch_lightning.callbacks.progress.TQDMProgressBar` with `refresh_rate` directly to the Trainer's `callbacks` argument instead. Or, to disable the progress bar pass `enable_progress_bar = False` to the Trainer.\n",
      "  rank_zero_deprecation(\n",
      "GPU available: True, used: True\n",
      "TPU available: False, using: 0 TPU cores\n",
      "IPU available: False, using: 0 IPUs\n",
      "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
      "\n",
      "  | Name      | Type                 | Params\n",
      "---------------------------------------------------\n",
      "0 | model     | MultiLayerPerceptron | 752   \n",
      "1 | train_mae | MeanAbsoluteError    | 0     \n",
      "2 | valid_mae | MeanAbsoluteError    | 0     \n",
      "3 | test_mae  | MeanAbsoluteError    | 0     \n",
      "---------------------------------------------------\n",
      "752       Trainable params\n",
      "0         Non-trainable params\n",
      "752       Total params\n",
      "0.003     Total estimated model params size (MB)\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validation sanity check: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jovyan/conda/lib/python3.8/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:258: PossibleUserWarning: The dataloader, val_dataloader 0, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 4 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
      "  rank_zero_warn(\n",
      "/home/jovyan/conda/lib/python3.8/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:258: PossibleUserWarning: The dataloader, train_dataloader, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 4 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
      "  rank_zero_warn(\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5550d1f367fa46af99bd42aade855be3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Training: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Validating: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training took 0.64 min in total.\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "\n",
    "trainer = pl.Trainer(\n",
    "    max_epochs=NUM_EPOCHS,\n",
    "    callbacks=callbacks,\n",
    "    progress_bar_refresh_rate=50,  # recommended for notebooks\n",
    "    accelerator=\"auto\",  # Uses GPUs or TPUs if available\n",
    "    devices=\"auto\",  # Uses all available GPUs/TPUs if applicable\n",
    "    logger=logger,\n",
    "    deterministic=True,\n",
    "    log_every_n_steps=10)\n",
    "\n",
    "start_time = time.time()\n",
    "trainer.fit(model=lightning_model, datamodule=data_module)\n",
    "\n",
    "runtime = (time.time() - start_time)/60\n",
    "print(f\"Training took {runtime:.2f} min in total.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af30f94f",
   "metadata": {},
   "source": [
    "## Evaluating the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "c6206c0b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='Epoch', ylabel='MAE'>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "metrics = pd.read_csv(f\"{trainer.logger.log_dir}/metrics.csv\")\n",
    "\n",
    "aggreg_metrics = []\n",
    "agg_col = \"epoch\"\n",
    "for i, dfg in metrics.groupby(agg_col):\n",
    "    agg = dict(dfg.mean())\n",
    "    agg[agg_col] = i\n",
    "    aggreg_metrics.append(agg)\n",
    "\n",
    "df_metrics = pd.DataFrame(aggreg_metrics)\n",
    "df_metrics[[\"train_loss\", \"valid_loss\"]].plot(\n",
    "    grid=True, legend=True, xlabel='Epoch', ylabel='Loss')\n",
    "df_metrics[[\"train_mae\", \"valid_mae\"]].plot(\n",
    "    grid=True, legend=True, xlabel='Epoch', ylabel='MAE')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f2bccedd",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Restoring states from the checkpoint path at logs/mlp-niu-cement/version_8/checkpoints/epoch=178-step=3937.ckpt\n",
      "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n",
      "Loaded model weights from checkpoint at logs/mlp-niu-cement/version_8/checkpoints/epoch=178-step=3937.ckpt\n",
      "/home/jovyan/conda/lib/python3.8/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:258: PossibleUserWarning: The dataloader, test_dataloader 0, does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` (try 4 which is the number of cpus on this machine) in the `DataLoader` init to improve performance.\n",
      "  rank_zero_warn(\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a4faab93962f4ed9b3f7110191ea5eae",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Testing: 0it [00:00, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃<span style=\"font-weight: bold\">        Test metric        </span>┃<span style=\"font-weight: bold\">       DataLoader 0        </span>┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│<span style=\"color: #008080; text-decoration-color: #008080\">         test_mae          </span>│<span style=\"color: #800080; text-decoration-color: #800080\">    0.3199999928474426     </span>│\n",
       "└───────────────────────────┴───────────────────────────┘\n",
       "</pre>\n"
      ],
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃\u001b[1m \u001b[0m\u001b[1m       Test metric       \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      DataLoader 0       \u001b[0m\u001b[1m \u001b[0m┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│\u001b[36m \u001b[0m\u001b[36m        test_mae         \u001b[0m\u001b[36m \u001b[0m│\u001b[35m \u001b[0m\u001b[35m   0.3199999928474426    \u001b[0m\u001b[35m \u001b[0m│\n",
       "└───────────────────────────┴───────────────────────────┘\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[{'test_mae': 0.3199999928474426}]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.test(model=lightning_model, datamodule=data_module, ckpt_path='best')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
